package com.efuture.reflect;

import java.lang.reflect.Field;

/**
 * @ClassNAME AccessField
 * @Description 通过反射访问属性
 * @Author zhaoshanshan
 * @Date 2021/9/11 9:07 下午
 * @Version 1.0
 */
public class AccessField {
    public static void main(String[] args) {
        try{
            //获取反射对象
            Class c = Class.forName("com.efuture.reflect.FieldTest");
            //实例化反射对象
            Object o = c.newInstance();
            //访问公有属性
            Field sexField = c.getDeclaredField("sex");//通过属性名称或是属性对象
            //设置属性值
            sexField.set(o,"男");
            //获取属性值
            Object sexValue = sexField.get(o);
            System.out.println(sexValue);

            //访问私有属性值
            Field nameField = c.getDeclaredField("name");//通过属性名称或是属性对象
            //设置属性值
            nameField.setAccessible(true);//必须设置这句 打破封装
            nameField.set(o,"赵山山");
            //获取属性值
            Object nameValue = nameField.get(o);
            System.out.println(nameValue);
        }catch (Exception e){
            e.getStackTrace();
        }

    }

}
class FieldTest{
    private String name;
    protected int no;
    public String sex;
    int age;
}